﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Inventario_HardSoft.ADO;
using System.Windows.Forms;

namespace Inventario_HardSoft.Controlador
{
    class Ctrl_Reg_Sol
    {
        ConexionDataContext conexion;
        public Ctrl_Reg_Sol()
        {
            conexion =new ConexionDataContext();        
        }

        internal List<USUARIO> getList_AsistentesNames()            
        {
            List<USUARIO> reps = conexion.USUARIO.Where(x => x.ELIMINADO == 0 && x.REPARADOR==1).ToList<USUARIO>();
            return reps; 
        }

        internal void getReg_Usu(DataGridView dg,string nomb_usu)
        {
            //string idusuario = conexion.USUARIO.Single(x => x.NOMBRE == nomb_usu).IDUSUARIO;
            int i = 1;
            // ***OJO: verificar el estado
            var consulta = from p in conexion.PROBLEMA
                           join eq in conexion.EQUIPO on p.IDEQUIPO equals eq.IDEQUIPO
                           join pt in conexion.PROBLEMA_TIPO on p.IDTIPOPROBLEMA equals pt.IDTIPOPROBLEMA
                           join u in conexion.USUARIO on eq.IDUSUARIO equals u.IDUSUARIO
                           where u.NOMBRE == nomb_usu && p.ESTADO == "pendiente" && p.IDTIPOPROBLEMA == "TIP_01"
                           select new
                           {
                               p.TICKET,
                               pt.TIPO_PROBLEMA,
                               p.IDPROBLEMA ,
                               p.IDEQUIPO ,
                               p.FECHAENTREGA,
                               p.FECHAREGISTROSALIDA,
                               p.ESTADO,
                               p.REGISTRADOPOR,
                               p.DESCRIPCION,
                               p.OBSERVACIONES,
                               p.TIEMPOREPARACION,
                               p.PRIORIDAD,
                               eq.TIPOEQUIPO,
                               p.REPARADORNAME
                           };
            
            dg.Rows.Clear();
            foreach (var c in consulta)
            {
                object[] obj  = new object[] { i,c.TICKET, c.TIPO_PROBLEMA, c.IDPROBLEMA, c.IDEQUIPO, c.FECHAENTREGA.GetValueOrDefault(DateTime.MinValue), 
                    c.FECHAREGISTROSALIDA.GetValueOrDefault(DateTime.MaxValue), c.ESTADO, c.REGISTRADOPOR, c.DESCRIPCION, c.OBSERVACIONES, c.TIEMPOREPARACION, 
                    this.cambiaPrioridad(c.PRIORIDAD.Value), c.TIPOEQUIPO, c.REPARADORNAME};
                obj[5] = ((DateTime)obj[5]).Equals(DateTime.MinValue) ? String.Empty : ((DateTime)obj[5]).ToShortDateString();
                obj[6] = ((DateTime)obj[6]).Equals(DateTime.MaxValue) ? String.Empty : ((DateTime)obj[6]).ToShortDateString();
                obj[8] = obj[8] == null ? String.Empty : obj[8].ToString();
                obj[9] = obj[9] == null ? String.Empty : obj[9].ToString();
                obj[10] = obj[10] == null ? String.Empty : obj[10].ToString();
                obj[11] = obj[11] == null ? String.Empty : obj[11].ToString();
                dg.Rows.Add(obj);
                i++;
            }
        }

        private string cambiaPrioridad(int pri)
        {
            string result = string.Empty;

            switch (pri)
            {
                case 1:
                    result = "Alta";
                    break;
                case 2:
                    result = "Media";
                    break;
                case 3:  
                    result = "Baja";
                    break;
            }

            return result;
        }

        internal void regSoluciones(string idProb, string solucion)
        {
            // falta q guarde la fecha
            PROBLEMA p = conexion.PROBLEMA.Single(x => x.IDPROBLEMA == idProb);
            p.FECHAREGISTROSALIDA = DateTime.Now;
            p.SOLUCION = solucion;
            p.ESTADO = "atendido"; 
            conexion.SubmitChanges();            
       }

        internal void reasignaProblema(string idprob, string repa)
        {
            PROBLEMA p = conexion.PROBLEMA.Single(x => x.IDPROBLEMA == idprob);
            p.REPARADORNAME = repa;
            conexion.SubmitChanges();
        }

        internal void getReg_UsuSoft(DataGridView dg, string nomb_usu)
        {
            //string idusuario = conexion.USUARIO.Single(x => x.NOMBRE == nomb_usu).IDUSUARIO;
            int i = 1;
            // ***OJO: verificar el estado
            var consulta = from p in conexion.PROBLEMA
                           join eq in conexion.EQUIPO on p.IDEQUIPO equals eq.IDEQUIPO
                           join pt in conexion.PROBLEMA_TIPO on p.IDTIPOPROBLEMA equals pt.IDTIPOPROBLEMA
                           join u in conexion.USUARIO on eq.IDUSUARIO equals u.IDUSUARIO
                           join pr in conexion.PROGRAMA on p.IDPROGRAMA equals pr.IDPROGRAMA
                           where u.NOMBRE == nomb_usu && p.ESTADO == "pendiente"
                           select new
                           {
                               p.TICKET,
                               pt.TIPO_PROBLEMA,
                               p.IDPROBLEMA,
                               p.IDEQUIPO,
                               p.FECHAENTREGA,
                               p.FECHAREGISTROSALIDA,
                               p.ESTADO,
                               p.REGISTRADOPOR,
                               p.DESCRIPCION,
                               p.OBSERVACIONES,
                               p.TIEMPOREPARACION,
                               p.PRIORIDAD,
                               eq.TIPOEQUIPO,
                               p.REPARADORNAME,
                               pr.NOMBREPROGRAMA 
                           };

            dg.Rows.Clear();
            foreach (var c in consulta)
            {
                object[] obj = new object[] { i,c.TICKET, c.TIPO_PROBLEMA, c.IDPROBLEMA, c.IDEQUIPO,
                                                c.FECHAENTREGA.GetValueOrDefault(DateTime.MinValue), 
                                                c.FECHAREGISTROSALIDA.GetValueOrDefault(DateTime.MaxValue), 
                                                c.ESTADO, c.REGISTRADOPOR, c.DESCRIPCION, c.OBSERVACIONES, 
                                                c.TIEMPOREPARACION, 
                                                this.cambiaPrioridad(c.PRIORIDAD.Value), 
                                                c.TIPOEQUIPO, 
                                                c.REPARADORNAME,
                                                c.NOMBREPROGRAMA
                                            };
                obj[5] = ((DateTime)obj[5]).Equals(DateTime.MinValue) ? String.Empty : ((DateTime)obj[5]).ToShortDateString();
                obj[6] = ((DateTime)obj[6]).Equals(DateTime.MaxValue) ? String.Empty : ((DateTime)obj[6]).ToShortDateString();
                obj[8] = obj[8] == null ? String.Empty : obj[8].ToString();
                obj[9] = obj[9] == null ? String.Empty : obj[9].ToString();
                obj[10] = obj[10] == null ? String.Empty : obj[10].ToString();
                obj[11] = obj[11] == null ? String.Empty : obj[11].ToString();
                dg.Rows.Add(obj);
                i++;
            }
        }

        internal void rechazaProblema(string idprob, string rexazo)
        {
            // falta q guarde la fecha
            PROBLEMA p = conexion.PROBLEMA.Single(x => x.IDPROBLEMA == idprob);
            p.FECHAREGISTROSALIDA = DateTime.Now;
            p.DESCRIPRECHAZO = rexazo;
            p.ESTADO = "rechazado";
            conexion.SubmitChanges();  
        }
    }
}
